package com.gsbelarus.gedemin.income.adapter;

import android.content.Context;
import android.content.res.Configuration;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.gsbelarus.gedemin.income.SumFormatter;
import com.gsbelarus.gedemin.income.table.ClientsTable;
import com.gsbelarus.gedemin.income.R;

import java.util.Calendar;

public class ClientsListSimpleAdapter {

    private Context context;
    private SumFormatter formatter;

    /**
     * текущая дата - для определения эл-тов списка,
     * привязанных к будущему периоду
     */
    private int curYear;
    private int curMonth;
    private int curDay;

    public ClientsListSimpleAdapter(Context context) {
        this.context = context;
        formatter = new SumFormatter(context);

        /** текущая дата - для определения эл-тов списка,
         * привязанных к будущему периоду*/
        Calendar cal = Calendar.getInstance();
        curYear = cal.get(Calendar.YEAR);
        curMonth = cal.get(Calendar.MONTH) + 1;
        curDay = cal.get(Calendar.DAY_OF_MONTH);
    }

    public void adaptView(View convertView, ClientsTable objIncome) {
        if (objIncome != null && convertView != null) {
            initNameAndPaidSum(convertView, objIncome);

            View plan_layout = convertView.findViewById(R.id.client_list_item_plan_text_layout);
            if (plan_layout == null || plan_layout.getVisibility() != View.VISIBLE)
                return;

            View plan_percent = convertView.findViewById(R.id.client_list_item_plan_text_layout);
            if (plan_percent == null || plan_percent.getVisibility() != View.VISIBLE)
                return;

            initPlanSum(convertView, objIncome);
        }
    }

    public void initNameAndPaidSum(View convertView, ClientsTable item) {
        TextView itemView = (TextView) convertView.findViewById(R.id.client_list_item_name);
        itemView.setText(item.getName());

        TextView sumPaid = (TextView) convertView.findViewById(R.id.client_list_item_paid);

        /**если есть план но нет поступления, то вместо суммы поступления выводим не "0", а "-"*/
        if ((item.getPlanSum() != 0) && (item.getPaidSum() == 0)) {
            sumPaid.setText(context.getString(R.string.text_dash));
        } else {
            sumPaid.setText(formatter.formatWithoutRounding(item.getPaidSum()));
        }
    }

    private void initPlanSum(View convertView, ClientsTable item) {
        TextView sumPaid = (TextView) convertView.findViewById(R.id.client_list_item_paid);
        if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
            sumPaid.append(",");


        TextView itemView = (TextView) convertView.findViewById(R.id.client_list_item_plan);
        itemView.setText(formatter.formatWithoutRounding(item.getPlanSum()));

        /** выводим процент выполнения плана в скобках после плановой суммы, но
         * если есть план и нет поступлений, процент (0%) не выводим */

        itemView = (TextView) convertView.findViewById(R.id.client_list_item_percent);
        if (item.getPercent() != 0) {
            itemView.setText("(" + String.valueOf(item.getPercent()) + "%)");
        } else {
            itemView.setText("");
        }

        ImageView percentImage = (ImageView) convertView.findViewById(R.id.client_list_item_percent_image);
        percentImage.setImageResource(item.getResourceImage());
    }

    public void changeVisibilityPlanText(View convertView, int visibility) {
        convertView.findViewById(R.id.client_list_item_plan_text_layout).setVisibility(visibility);
    }

    public void changeVisibilityPlanImage(View convertView, int visibility) {
        convertView.findViewById(R.id.client_list_item_plan_percent_image_layout).setVisibility(visibility);
    }

    public void changeVisibilityPaidText(View convertView, int visibility) {
        convertView.findViewById(R.id.client_list_item_paid).setVisibility(visibility);
    }

    public void changeVisibilityPercent(View convertView, int visibility) {
        convertView.findViewById(R.id.client_list_item_percent).setVisibility(visibility);
    }

    /**
     * сравнение даты из item c текущей
     */
    public boolean isFuturePeriod(ClientsTable item) {

        /**сравниваем год*/
        if (item.getOnYear() < curYear)
            return false;
        if (item.getOnYear() > curYear)
            return true;

        /**если год совпадает, сравниваем месяц*/

        if (item.getOnMonth() < curMonth)
            return false;
        if (item.getOnMonth() > curMonth)
            return true;

        /**если год и месяц совпадает, сравниваем дни*/
        if (item.getOnDay() < curDay)
            return false;
        if (item.getOnDay() > curDay)
            return true;

        /**если даты полностью совпадают, это НЕ будущий период*/
        return false;
    }
}
